<?php

require_once APPPATH . 'core/BaseDAO.php';

use models\M_socio;
use models\M_tipo_documento;
use models\M_categoria;

class SocioDAO extends BaseDAO {

    function __construct() {
        parent::__construct();
    }
	
    public function getSocios(){
		
        try {

            $query = $this->em->createQuery('SELECT s FROM models\M_socio s');

            $socios = $query->getResult();

            return empty($socios) ? FALSE : $socios;
			
        } catch (Exception $e) {
            return FALSE;
        }
        
    }
    
    public function getSociosBy($offset, $maxResults, $tipoDocumento = '',$numeroDocumento = '',$apellido = ''){
        
        try {
            
            $comienzo = "SELECT s FROM models\M_socio s JOIN s.tipo_documento t";
            
            $where = "";
            
            if(!($tipoDocumento == '' && $numeroDocumento == '' && $apellido == '')){
                
                $where .= ' WHERE ';
                
                $where .= "s.apellido LIKE ".(($apellido == '') ? "'%'" : " '%".$apellido."%' ");
                
                $where .= ($tipoDocumento == '' || $tipoDocumento == 0) ? "" : " AND t.id = ".$tipoDocumento;

                $where .= ($numeroDocumento == '') ? "" : " AND s.numero_documento = ".$numeroDocumento;
                
            }
            
            $consulta = $comienzo.$where.'';
            
            $query = $this->em->createQuery($consulta.' ORDER BY s.apellido, s.nombre, s.numero_documento ASC');
            
            $query->setFirstResult($offset);
            $query->setMaxResults($maxResults);
            
            $socios = $query->getResult();
          
            return empty($socios) ? FALSE : $socios;
			
        } catch (Exception $e) {
            
            return FALSE;
        }
        
    }
    
    public function getAllSociosBy($tipoDocumento = '',$numeroDocumento = '',$apellido = ''){
        
        try {
            
            $comienzo = "SELECT s FROM models\M_socio s JOIN s.tipo_documento t";
            
            $where = "";
            
            if(!($tipoDocumento == '' && $numeroDocumento == '' && $apellido == '')){
                
                $where .= ' WHERE ';
                
                $where .= "s.apellido LIKE ".(($apellido == '') ? "'%'" : " '%".$apellido."%' ");
                
                $where .= ($tipoDocumento == '' || $tipoDocumento == 0) ? "" : " AND t.id = ".$tipoDocumento;

                $where .= ($numeroDocumento == '') ? "" : " AND s.numero_documento = ".$numeroDocumento;
                
            }
            
            $consulta = $comienzo.$where.'';
            
            $query = $this->em->createQuery($consulta.' ORDER BY s.apellido, s.nombre, s.numero_documento ASC');
            
            $socios = $query->getResult();
          
            return empty($socios) ? FALSE : $socios;
			
        } catch (Exception $e) {
            
            return FALSE;
        }
        
    }
    
    public function getSocioBy($valor, $campo, $tipo) {

        try {

            $comparador = $tipo === 'string' ? 'like' : '=';

            $qb = $this->em->createQueryBuilder();
            $qb->add('select', 's')
                    ->add('from', 'models\M_socio s')
                    ->add('where', 's.' . $campo . ' ' . $comparador . ' ?1')
                    ->setParameter(1, $valor);

            $persona = $qb->getQuery()->getResult();

            return empty($persona) ? FALSE : $persona[0];
        } catch (Exception $e) {

            return FALSE;
        }
    }
    
    public function getSociosCobrables(){
        
        try {

            $query = $this->em->createQuery('SELECT s FROM models\M_socio s JOIN s.estado e
                                                WHERE e.id IN (1,2)');

            $socios = $query->getResult();

            return empty($socios) ? FALSE : $socios;
			
        } catch (Exception $e) {
            return FALSE;
        }
        
    }
    
    public function getSociosCobrablesEnZona($idZona){
        
        try {

            $query = $this->em->createQuery('SELECT s FROM models\M_socio s JOIN s.zona z JOIN s.estado e
                                                WHERE z.id = '.$idZona.'
                                                    AND e.id IN (0,1,2)');

            $socios = $query->getResult();

            return empty($socios) ? FALSE : $socios;
			
        } catch (Exception $e) {
            return FALSE;
        }
        
    }
    
    public function getCountsCategoriasSocio(){
        try {

            $query = $this->em->createQuery('SELECT c.id as id, c.nombre as nombre, COUNT(c.id) as cantidad
                                                FROM models\M_socio s JOIN s.categoria c
                                                group by c.id, c.nombre
                                                order by c.id, c.nombre');

            $socios = $query->getResult();

            return empty($socios) ? FALSE : $socios;
			
        } catch (Exception $e) {
            return FALSE;
        }
    }
    
    public function actualizarEstadoSocio($idSocio,$idEstado, $dia, $mes, $anio){
        
        $CI = & get_instance();
        $CI->load->database();
        $query = $CI->db->query('UPDATE "BD_Operativa".socio
                                SET estado_id = '.$idEstado.',
                                    vencimiento_estado = \''.$anio.'-'.$mes.'-'.$dia.'\'
                                WHERE id = '.$idSocio);
        $rows = $query;
        $CI->db->close();
        
    }
    
    public function insertarSocio($nombre, $apellido, $tipoDocumento, $numeroDocumento, $domicilio,
                                    $domicilioCobro, $fechaNacimiento, $zona,$categoria){
             
        $CI = & get_instance();
        $CI->load->database();
        $fecha_nacimiento = date('Y-m-d',strtotime($fechaNacimiento));
       
       
       
        $query = $CI->db->query('INSERT INTO "BD_Operativa".socio 
                                    (apellido, nombre, tipo_documento_id, numero_documento, domicilio,
                                    domicilio_cobro, fecha_nacimiento, zona_id, vitalicio, categoria_id,
                                    estado_id)
                                VALUES (\''.$apellido.'\', \''.$nombre.'\', '.$tipoDocumento.', '.$numeroDocumento.', 
                                    \''.$domicilio.'\', \''.$domicilioCobro.'\', \''.$fecha_nacimiento.'\', '.$zona.',
                                        \'FALSE\', '.$categoria.', 0)');
        
        $CI->db->close();
        
        return $query;
        
    }
    
    public function habilitarSocio($estado_id, $fechaVencimiento, $socio_id){
        
        $CI = & get_instance();
        $CI->load->database();
        $query = $CI->db->query('UPDATE "BD_Operativa".socio
                                SET estado_id = '.$estado_id.',
                                    vencimiento_estado = \''.$fechaVencimiento.'\'
                                WHERE id = '.$socio_id);
        $rows = $query;
        $CI->db->close();
        
    }
		
}
